import * as _ from 'lodash';
import { isUndefined } from 'util';

/**
 * @author leihfei
 * @date 2019-04-01
 * @description 拷贝相关工具类
 */
export class CopyUtil {
  /**
   * 拷贝对象
   * @param source 原始数据
   */
  public static copy(source: any): any {
    if (isUndefined(source) || source === '') {
      throw new Error('待拷贝数据异常，无法拷贝');
    }
    return _.clone(source);
  }

  /**
   * @method deepCopy 深拷贝
   * @param p 原拷贝数据
   * @param c 拷贝数据类型，仅为数据或json
   * @author 周贞荣
   */
  public static deepCopy(p, c) {
    c = c || {};
    for (const i in p) {
      if (p.hasOwnProperty(i)) {
        if (typeof p[i] === 'object' && p[i] !== null) {
          c[i] = Array.isArray(p[i]) ? [] : {};
          this.deepCopy(p[i], c[i]);
        } else {
          c[i] = p[i];
        }
      }
    }
    return c;
  }

  /**
   * 获取两个数组中的不同元素
   * @param arr1
   * @param arr2
   */
  public static getArrDifference(arr1, arr2) {
    return arr1.concat(arr2).filter(function(v, i, arr) {
      return arr.indexOf(v) === arr.lastIndexOf(v);
    });
  }
}
